#include "../head.h"    

// sem_t *sem_open(const char *name, int oflag);
// sem_t *sem_open(const char *name, int oflag,mode_t mode, unsigned int value);
// 初始化并打开一个信号量 name 有名信号量的名字 例如“/sem_test”  -> 存放在/dev/shm目录下；
// oflag 创建信号量的标志位 O_CREAT|O_EXCL 不存在就创建 存在就销毁  O_CREAT 不存在就创建； mode 文件权限  value 有名信号量的初始值

// 有名信号量作用于多个进程

int main()
{
    sem_t *sem = sem_open("/sem_test", O_CREAT, 0777, 2);
    printf("创建信号量\n");

    // int sem_wait(sem_t *sem); P操作 对资源数进行-1操作
    // 当资源数小于0时，发生阻塞；-2 表示有两个进程在等待资源
    sem_wait(sem);
    printf("P操作1\n");

    sem_wait(sem);
    printf("P操作2\n");
    
    sem_wait(sem);
    printf("P操作3\n");

    //关闭有名信号量
    // int sem_close(sem_t *sem);    
    //删除有名信号量
    // int sem_unlink(const char *name);

    printf("end\n");
}